使用Visual Effect Graph创作惊艳的视觉效果
在Unite LA 2018期间,我们发布了在Unity中创作实时视觉效果的工具Visual Effect Graph,该工具使用在GPU运行的计算着色器和基于节点的工作流程。本文将比较Visual Effect Graph和现有的粒子系统,并展示如何开始使用这款强大工具。
Visual Effect Graph受到主流电影特效软件的启发,加入了许多相同的强大功能用于创作实时视觉效果,下面视频将对Visual Effect Graph进行简要介绍。
入门
我们可以通过Unity 2018.3或更高版本编辑器中的资源包管理器安装Visual Effect Graph。
请点击Unity编辑器菜单Window > Package Manager,点开Advanced并选中“Show preview packages”,然后找到Visual Effect Graph,单击Install按钮即可。
目前,Visual Effect Graph运行于Unity 2018.3的高清晰渲染管线,对轻量级渲染管线的支持预计在之后的版本推出。为了使用Visual Effect Graph,请确保你的Unity项目使用High-Definition RP模板。
为了创建视觉效果,请在项目窗口点击右键,依次选择Create > Visual Effects > Visual Effects Graph。
创建资源后,将其拖到场景视图或层级窗口。
Visual Effect Graph窗口
Visual Effect Graph适用于VFX新手到资深艺术家和程序员等,Visual Effect Graph通过使用节点和属性模块,来提供一个快速学习,轻松掌握,强大的工作流程。
Context包含多个属性模块,用于表示应用于粒子的操作顺序。节点之间互相连接,会执行一系列输入属性模块的计算,从而定义粒子属性。节点系统会让使用Shader Graph着色器视图的用户感到很熟悉,但二个工具并不完全相同。
创建Context或单个节点,可以点击空格键,或单击右键,选择Create Node。创建属性模块,可在节点中点击空格键,或者单击右键,选择Create Block。
1
Context
System是Initialize、Update和Output的Context组合。它由虚线轮廓表示。多个系统可以存在同一个Visual Effect Graph资源中。
Spawn定义生成粒子的数量和时间,例如Periodic Burst(间歇性喷发)、Constant(持续喷发)和Single Burst(单次喷发)等。
Initialize的前二个属性为Capacity(同时存在粒子数量)和Bounds(区域)。
Capacity确定每次系统中可以存在的粒子数量。
请注意:Capacity属性会根据粒子数量分配合适的内存,所以该数值应该对应可生成的粒子数量进行设置。通常,该值的计算公式为:Rate × Max Lifetime = Capacity
Bounds定义摄像机视图中粒子生成和模拟的区域。
Update会不断改变粒子属性,它是唯一可以使用作用力的部分。
Output会渲染粒子,它决定生成的粒子类型、纹理、颜色和方向。我们可以在此对粒子的大小,位置等属性进行最后调整。每个粒子系统可以有不同的输出结果,每个输出结果可以调整多数粒子属性。
2
Block
Block属性模块定义粒子的属性,这些属性可以由节点重写。Block包含在Context内,但有些属性模块无法在特定Context中使用。例如:Spawn Rate Block只能添加到Spawn Context中。
我们可以通过取消勾选名称右侧的复选框禁用属性模块。有些输入内容可以通过点击输入名称左侧的小箭头展开,可以访问并修改详细属性,例如:Vector3的X,Y和Z。
在视图中选择Block和Context时,我们可以通过检视窗口修改它们。因此在创作视觉效果时,显示检视窗口可以方便创作过程。
3
Node
Node节点具有很多功能,包括从输出指定数值和参数数据到执行各种不同的计算。Add,Multiply或Lerp等多数定义数值的节点可以通过修改来输出不同数值类型,例如:Float,Vector3或颜色数值。
流程工具
1
Auto Compile
默认情况下,每次修改节点或属性模块时,Visual Effect Graph都会重新编译。对于较小的视图,Auto Compile自动编译帮助我们在场景中快速看到改动效果。
但是对于比较复杂的系统,编译时间可能较长。禁用Auto Compile后,视图只会在保存或单击Compile按钮时进行编译,这样在大幅改动视图时,不必在每次调整后等待较长时间。
2
Blackboard
Blackboard面板可以存储视图中的参数,并公开给检视窗口以便进行修改。为了安排不同参数类型,Blackboard面板支持设置Categories类型和Tooltips提示信息。
创建新参数,请点击Blackboard右上角的+图标。
3
Target GameObject
Target GameObject面板允许你控制播放过程,或是查看场景中已打开视觉效果特定实例的本地空间辅助图示。
附加游戏对象,请点击场景中已打开的视觉效果实例,然后点击Attach,直接从场景实例打开视觉效果也会自动将该面板附加到游戏对象上。
4
Parameter Binders
虽然可以通过脚本来设置公开的参数,但Parameter Binders组件会自动配置视觉效果的参数,例如:游戏对象的位置,缩放和旋转。
添加Parameter Binder组件,请在层级窗口选中视觉效果,单击Add Component,搜索“Binder”并添加。将游戏对象拖到标着“None”的方框,然后点击 ⌄ 图标选择合适的参数。
与现有粒子系统比较
Visual Effect Graph和粒子系统的主要区别在于它们运行的硬件。粒子系统在CPU模拟生成,而Visual Effect Graph将大量计算移动到运行在GPU的计算着色器。
从上面的对比图中,我们可以看出Visual Effect Graph的优点是能够模拟数百万个粒子,计算复杂的模拟过程,以及读取帧缓冲区。而粒子系统可以使用基础物理系统,并通过回读来与游戏交互。
特别需要注意的是设备兼容性,部分设备不支持Visual Effect Graph所需的计算着色器,例如:大多数的手机。
支持的数据类型
Visual Effect Graph支持使用Point Cache,Vector Field和Signed Distance Field等资源。通过这些资源的支持,可以表示体积、作用力、碰撞以及自定义数据类型。
Point Cache保存空间中点的属性,例如:Transform、法线、颜色和UV。
Vector Field在获取粒子的位置后,会在3D空间移动粒子。
Signed Distance Field可以使用体积来表示吸引和碰撞粒子。
下面的示例是在其它工具制作骷髅,然后导入Unity来创建魔法效果。
VFX Toolbox工具集
Visual Effect Graph团队开发了一系列工具用于生成数据类型,这些工具统称为VFX Toolbox工具集。通过VFX Toolbox创建的数据可以与Unity的其它功能结合使用。
下载VFX Toolbox工具集:
https://github.com/Unity-Technologies/VFXToolbox
1
Image Sequencer
Image Sequencer图像序列工具可以处理图像序列,生成Flipbook纹理图集等纹理资源。
2
Point Cache Bake Tool
Point Cache Bake Tool点缓存烘焙工具又名为pCache Tool,它可以从纹理生成2D点缓存,从网格生成3D点缓存。
使用技巧
1
便签,节点分组和名称
Visual Effect Graph带有一些实用功能,可以帮助注释和标记视图。
Context Names环境名称可以让你命名Context环境,只需双击Context环境标题部分的小型区域即可。
创建System Name系统名称,请双击虚线轮廓顶部下的小型区域。
Sticky Note便签功能可以创建可调整大小的文本框。创建标签,请在视图的空白区域单击右键,选择Create Sticky Note。
便签中,字体大小从Small到Huge共有四个选项,右键单击便签并从列表中选择修改字体大小。调整便签大小,可以拖动便签边缘或边角进行调整。
Node Group节点分组为节点的分组设置标题,并将它们作为整体进行移动。创建节点分组,请选择一组节点后,右键单击一个选中节点,然后选择Group Selection。
如果要移动节点到节点分组,将该节点拖入已有分组即可。如果要将节点移出分组,按住Shift键然后将其拖出分组。如果要删除分组而不删除节点,单击选中分组标题,然后按下Delete键即可。
2
Spawner Chaining
Spawner Chaining生成器链允许一个生成器开启或停止其它生成器。只要将Spawn Context的输出部分连接到Start或Stop即可。
下图中节点生成了持续2秒的常量流,停止2秒后会重复之前的操作。
2
GPU事件
GPU事件允许在自定义条件下或粒子消失时触发另一个粒子系统。下图中,节点会在粒子消失时生成10~15个粒子。
启用GPU事件,请打开Preferences>Visual Effects,勾选"Experimental Operators/Blocks"。
3
Timeline
Visual Effect Graph完全兼容Timeline功能,可以准确控制视觉效果的时间设置。你可以通过二种方法控制效果:事件和参数。
如果要控制时间,请在Timeline中创建Visual Effect Activation Track。如果要控制参数,请在Timeline中创建Animation Track。
下面的视频展示了如何设置这些轨道,从而使它们继承来自事件的数值。
下载示例项目
为了帮助大家学习Visual Effect Graph,开发团队发布了持续更新的Unity示例项目。首次发布时,该项目包含三个示例:
Unity Logo示例展示基本行为
Morphing Face示例展示HDRP Lit的兼容性和点缓存
Butterflies示例展示高级行为
下载示例项目:
https://github.com/Unity-Technologies/VisualEffectGraph-Samples
结语
Visual Effect Graph及其文档正处于开发和编写状态。虽然处于预览阶段,但我们可以在GitHub的Scriptable Render Pipeline Wiki中访问文档。
文档访问地址:
https://github.com/Unity-Technologies/ScriptableRenderPipeline/wiki/Visual-Effect-Graph
我们将分享Visual Effect Graph的一些教程,尽请期待。更多Unity更多信息介绍尽在Unity官方中文论坛(UnityChina.cn)!
推荐阅读
官方活动
Unity的新订阅用户在获得优惠礼包的同时,我们将邀请活动期间所有的订阅用户参与Unity的圣诞派对,共庆年终圣诞季![了解详情...]
Asset Store年终巨惠Cyber Week劲爆来袭
Asset Store资源商店年终巨惠Cyber Week劲爆来袭!多至2千余款人气热销资源参与促销,低至5折优惠,更有4.5折特惠组合资源包,好资源和低价格一包打尽!
活动地址:
https://assetstore.unity.com
Unity面向全球的学生推出-Unity全球学生开发挑战赛,寻找全世界最具创意,展现自我的学生开发者团队。[了解详情...]
活动地址:
https://connect.unity.com/challenges/gsc2018
参加Unity 2D开发挑战赛,向全世界展示你在Unity 2D方面的创意实践。[了解详情...]
活动地址:
https://connect.unity.com/challenges/2dchallenge
点击“阅读原文”访问Unity官方中文论坛